package com.zh.note.leetcode.tree;

import com.zh.note.leetcode.model.TreeNode;

/**
 * 101. 对称二叉树
 * 给你一个二叉树的根节点 root ， 检查它是否轴对称。
 * 示例 1：
 * 输入：root = [1,2,2,3,4,4,3]
 * 输出：true
 */
public class LC_101_isSymmetric {

        public boolean isSymmetric(TreeNode root) {
            return checked(root.left, root.right);

        }

        private boolean checked(TreeNode left, TreeNode right) {
            // 首先排除空节点的情况
            if (left == null && right != null) {
                return false;
            }
            if (left != null && right == null) {
                return false;
            }
            if (left == null && right == null) {
                return true;
            }
            if (left.val != right.val) {
                return false;
            }
            // 此时就是：左右节点都不为空，且数值相同的情况
            // 此时才做递归，做下一层的判断
            boolean checkedLeft = checked(left.left, right.right); // 左子树：左、 右子树：右
            boolean checkedRight = checked(left.right, right.left);  // 左子树：右、 右子树：左

            return checkedLeft && checkedRight; // 左子树：中、 右子树：中 （逻辑处理）
        }

}
